/**
给你一个整数数组 nums 和一个整数 k 。
每一步操作中，你需要从数组中选出和为 k 的两个整数，并将它们移出数组。
返回你可以对数组执行的最大操作数。
 */

/**
示例 1：
输入：nums = [1,2,3,4], k = 5
输出：2
解释：开始时 nums = [1,2,3,4]：
- 移出 1 和 4 ，之后 nums = [2,3]
- 移出 2 和 3 ，之后 nums = []
不再有和为 5 的数对，因此最多执行 2 次操作。
示例 2：
输入：nums = [3,1,3,4,3], k = 6
输出：1
解释：开始时 nums = [3,1,3,4,3]：
- 移出前两个 3 ，之后nums = [1,4,3]
不再有和为 6 的数对，因此最多执行 1 次操作。
 */

/**
 * 思路
 * 不能用指针的方式，每个数都需要匹配其他所有数，会造成很多次循环
 *  所以使用map，存储数据出现的个数，如果map中存在k-item,就将map中这一项的值减一，count加一，这时item不用存储在map中
 */
var maxOperations = function (nums, k) {
    let count = 0
    let map = new Map()
    nums.forEach(item => {
        const value = k - item
        if (map.has(value) && map.get(value) > 0) {
            map.set(value, map.get(value) - 1)
            count++
        } else {
            map.has(item) ? map.set(item, map.get(item) + 1) : map.set(item, 1)
        }
    })

    return count
};